package com.jy.service;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Comment;

import com.jy.model.TaskLeave;

public interface AppBaseService {
	/**
	 * 系统用户提交申请方法
	 * @param assigneeKey 提交人Key 流程图中assignee变量
	 * @param assigneeValue 提交人姓名 一般为系统当前登录用户
	 * @param processInstanceKey 流程实例Key，在自己构建的流程图中的Id
	 * @param bussinessId 业务ID 即添加数据的ID
	 * @return ProcessInstance 流程实例对象，用来获取当前流程实例的相关信息
	 */
	public ProcessInstance startProcessInstance(String assigneeKey, String assigneeValue, String processInstanceKey, String bussinessId);
	/**
	 * 提交申请
	 * @param pocessId  流程实例ID 可在业务表单中获得
	 * @param assigneeKey 下一办理人Key 流程图中assignee变量
	 * @param assigneeValue 下一办理人姓名 一般为业务中指定的
	 * @return 流程实例对象
	 */
	public ProcessInstance applyComplete(String pocessId, String assigneeKey, String assigneeValue);
	public ProcessInstance applyComplete(String pocessId, Map<String, Object> variables);
	
	public List<TaskLeave> getTask(Integer start, Integer length, String assignee);
	
	/**
	 * 获取任务个数
	 * @param assignee 任务人
	 * @return 任务个数
	 */
	public long getTaskCount(String assignee);
	/**
	 * 获取下一节点操作按钮
	 * @param taskId 任务Id
	 * @return 操作按钮集合，如果没有则为""
	 */
	public List<String> getTaskPvm(String taskId);
	/**
	 * 审批、审核方法
	 * @param pocessId 流程实例ID
	 * @param variables 参数Map集合
	 * @param commons 审核批注（审核的时候备注）
	 * @param tjuser 审核人（即当前系统用户）
	 * @param btnName 点击按钮名称 如：审核 驳回
	 * @return 流程实例对象 
	 */
	public ProcessInstance applyComplete(String pocessId, Map<String, Object> variables,
                                         String commons, String tjuser, String btnName);
	/**
	 * 获取流程批注
	 * @param pocessId 流程实例ID
	 * @return 批注集合
	 */
	public List<Comment> getCommon(String pocessId);
	
	/**
	 * 获取流程历史批注
	 * @param pocessId 流程实例ID
	 * @return 批注集合
	 */
	public List<Comment> getHistoryComment(String processId);
	
	/**
	 * 获取任务图片
	 * @param pocessId 流程实例ID
	 * @return 流程定义对象
	 */
	public ProcessDefinition getTaskImage(String pocessId);
	
	/**
	 * 获取图片流
	 * @param deploymentId 部署ID
	 * @param imageName 图片名称
	 * @return 图片流
	 */
	public InputStream getImageStream(String deploymentId, String imageName);
	
	/**
	 * 获取ActivityImpl 当前流程活动的对象（可以获取xml配置文件中的信息）
	 * @param pocessId 流程实例ID
	 * @return
	 */
	public ActivityImpl getActivityImpl(String pocessId);
	
	/**
	 * 删除流程实例
	 * @param processId 流程实例ID
	 * @param reason 删除原因
	 */
	public void deleteProcessInstance(String processId, String reason);
	
	/**
	 * 获取历史任务
	 * @param processId 流程实例ID
	 * @return 历史任务对象
	 */
	public List<HistoricTaskInstance> findHistoryTask(String processId);
	
	public HistoricTaskInstance historyImage(String processId);
	/**
	 * 获取历史任务
	 * @param assignee 任务人
	 * @return 历史任务对象
	 */
	public List<HistoricTaskInstance> findHistoryAssigneeTask(String assignee);
	public ProcessInstance applyComplete(String pocessId, Map<String, Object> variables,
                                         String tjuser, String btnName);
}
